/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package stubs.negocio;
import interfaces.IGerenciaVoo;
import java.util.ArrayList;
import entidades.Voo;
import entidades.Cidade;
import entidades.Aeroporto;
import erros.ErroCadastramento;
import erros.ErroPersistencia;
import erros.ErroRemocao;
import erros.ErroAtualizacao;
import erros.ErroRecuperacao;
/**
 * stub simula a controladora gerencia voo.
 * @author thiagostuckert
 * @author lucas
 */
public class StubCntrGerenciaVoo implements IGerenciaVoo {
    /**
     * Codigo de voo que retorna sucesso.
     */
    private static final String CODIGO_VALIDO = "AAA987";
    /**
     * Cidade de origem que simula sucesso.
     */
    private static final String CIDADE_ORIGEM_VALIDO = "Brasilia";
    /**
     * Cidade de destino que simula sucesso.
     */
    private static final String CIDADE_DESTINO_VALIDO = "Porto Alegre";

    /**
     * Recupera um voo atraves do codigo do voo.
     * @param voo voo a ser recuperado.
     * @return voo voo armazenado no banco.
     * @throws ErroRecuperacao lança exceção caso a ação
     * não obtenha sucesso.
     */
    final Voo recuperaVoo(final Voo voo) throws ErroRecuperacao {
        return new Voo("AAA666","20:07:10", "30:07:10", "12:00:00",
                "16:00:00", new Aeroporto("GAL"), new Aeroporto("COP"),
                    new Cidade("Rio de Janeiro"), new Cidade("Campinas"),100);
    }
    /**
     * Recupera todos os voos armazenados no banco.
     * @return lista lista de voos armazenados no banco.
     * @throws ErroPersistencia erro lançado caso a ação
     * não obtenha sucesso.
     */
    @Override
    public ArrayList<Voo> recuperarVoos() throws ErroRecuperacao{
        ArrayList listaVoos = new ArrayList();
        listaVoos.add(new Voo("AAA987", "20:07:10", "30:07:10", "12:00:00",
                "16:00:00", new Aeroporto("BSB"), new Aeroporto("POA"),
                    new Cidade("Brasília"), new Cidade("Porto Alegre"),100));
        listaVoos.add(new Voo("AAA666","20:07:10", "30:07:10", "12:00:00",
                "16:00:00", new Aeroporto("GAL"), new Aeroporto("COP"),
                    new Cidade("Rio de Janeiro"), new Cidade("Campinas"),100));

        return listaVoos;
    }
    /**
     * Cadastra o voo representado pelo objeto voo.
     * @param voo voo a ser cadastrado.
     * @throws ErroCadastramento erro lançado caso a ação
     * não obtenha sucesso.
     */
    @Override
    public void cadastrarVoo(Voo voo) throws ErroCadastramento {
        if(!(voo.getNumeroVoo()).equals(CODIGO_VALIDO)){
            throw new ErroCadastramento("Erro no casdastrar do voo.");
        }
    }
    /**
     * Deleta o voo representado pelo objeto voo.
     * @param voo voo a ser deletado.
     * @throws ErroRemocao erro lançado caso a ação não obtenha sucesso.
     */
    @Override
    public void deletarVoo(Voo voo) throws ErroRemocao{
        if(!(voo.getNumeroVoo()).equals(CODIGO_VALIDO)){
            throw new ErroRemocao("Erro ao tentar remover o voo.");
        }
    }

    /**
     * Atualiza vooVelho para vooNovo.
     * @param vooVelho Voo o qual vai ser atualizado.
     * @param vooNovo Voo o qual contém as informações novas.
     * @throws ErroAtualizacao erro lançado caso a ação não obtenha sucesso.
     */
    @Override
    public void atualizarVoo(Voo vooVelho, Voo vooNovo) throws ErroAtualizacao{
        if(!(vooVelho.getNumeroVoo()).equals(CODIGO_VALIDO)){
            throw new ErroAtualizacao("Erro ao tentar atualizar o voo.");
        }
    }
    /**
     * Recupera voos dado uma cidade de Origem e uma cidade de destino em uma
     * determinada data.
     * @param cidadeOrigem Cidade de origem utilizada na busca.
     * @param cidadeDestino Cidade de destino utilizada na pesquisa.
     * @param dataPartida Data de partida do voo utilizada na pesquisa.
     * @return lista lista de voos respeitando os critérios da pesquisa.
     * @throws ErroRecuperacao erro lançado caso a ação não obtenha sucesso.
     */
    @Override
    public ArrayList<Voo> recuperarVoos(Cidade cidadeOrigem,
            Cidade cidadeDestino, String dataPartida) throws ErroRecuperacao {
            ArrayList listaVoos = new ArrayList();

            if (CIDADE_ORIGEM_VALIDO.equals(cidadeOrigem.getNomeCidade())) {
                listaVoos.add(new Voo("CCC985", "20:07:10", "30:07:10",
                        "12:00:00", "16:00:00", new Aeroporto("BSB"),
                        new Aeroporto("POA"), new Cidade(CIDADE_ORIGEM_VALIDO),
                        new Cidade(CIDADE_DESTINO_VALIDO),50));

                listaVoos.add(new Voo("CCC985", "23:07:10", "30:08:10",
                        "12:05:00", "16:05:00", new Aeroporto("BSB"),
                        new Aeroporto("POA"), new Cidade(CIDADE_ORIGEM_VALIDO),
                        new Cidade(CIDADE_DESTINO_VALIDO),40));

                return listaVoos;
            }
            else{
                throw new ErroRecuperacao("Erro ao tentar consultar o voo.");
            }
    }

    /**
     * Recupera um voo atraves do codigo do voo.
     * @param voo codigo do voo a ser recuperado.
     * @return voo voo armazenado no banco.
     * @throws ErroRecuperacao lança exceção caso a ação
     * não obtenha sucesso.
     */
    @Override
    public Voo recuperarVoo(Voo voo) throws ErroRecuperacao {
        if(!voo.getNumeroVoo().equals(CODIGO_VALIDO)){
            throw new ErroRecuperacao("Voo não pode ser recuperado");
        }
        else {
            Voo vooRetorno = new Voo("CCC985", "20:07:10", "30:07:10",
                        "12:00:00", "16:00:00", new Aeroporto("BSB"),
                        new Aeroporto("POA"), new Cidade(CIDADE_ORIGEM_VALIDO),
                        new Cidade(CIDADE_DESTINO_VALIDO),50);
            return(vooRetorno);
        }
    }
}
